Numerous software programs have been developed that allow users to store schedules of events into a computer. Typically, such programs also generate visual displays that illustrate the events that will occur during a specified time period (e.g. calendars). Using such programs, users may, for example, enter information about events that are scheduled to occur during a particular month. The software stores the information on a storage device. At any time thereafter, users may instruct the software to generate a calendar of the month. When generating the calendar, the software generates indications of the scheduled events on the appropriate days of the calendar.
Calendar applications that use a client/server model have been developed. With such applications, a user interacts with a client application to enter information about events, including when the events will occur. The client application transmits data representing the events to a server application. The server application stores data representing the events. Subsequently, the client application may transmit data representing a time period, such as a particular month or year, to the server application. The server application reads the stored event data, determines which events are scheduled to occur during the specified time period, and transmits data representing the appointments that are scheduled to occur during the specified time period back to the client application. The client application then generates a calendar of the specified time period along with visual indications of the events that will occur during the specified time period.
Some events occur on a regular basis. Rather than require a user to enter information for each occurrence of a recurring event, most calendar applications allow the user to specify a first occurrence of the event and a recurrence interval for the event. For example, a user may have to attend a certain meeting every Friday at 10:00 am. Rather than enter information for each occurrence of the meeting, the user can enter information about the first occurrence of the meeting and an indication that the meeting takes place on a weekly basis (the "recurrence interval").
When generating a calendar for a particular time period, calendar applications that support recurring events must calculate if and when the event will occur during the particular time period. The calendar application makes this determination based on the initial occurrence time and the recurrence interval. Typically, a calendar application makes this determination when a user requests a calendar display of a particular period.
Current calendar applications support many typical recurrence intervals. For example, some current calendar applications allow a user to specify that an event recurs daily, weekly, monthly, or Monday through Friday. However, events that recur at less typical intervals may require multiple entries. For example, to specify an event that occurs every Monday and Wednesday, a user may have to schedule the event as if it were two weekly events. That is, the user may have to input a first event entry to indicate that the event occurs weekly every Monday, and then a second event entry to indicate that the event occurs weekly every Wednesday. Events that recur at less regular patterns may be even more difficult to specify. Consider, for example, an event that occurs on the second Tuesday and the fourth Friday of every month.
Events that recur at smaller intervals within larger intervals may be impossible to specify using current calendar applications. For example, consider an event that occurs every Monday (weekly) of every third month (monthly). Similarly, consider an event that occurs every hour (hourly) of every Wednesday (weekly).
It is clearly desirable to provide a mechanism to represent complex schedules with single event entries. It is further desirable that the schedules be represented and stored in a concise fornat to minimize the storage space required for event schedule information.